도메인 주도 설계(1) - 도메인 주도 설계(Domain-Driven Design;DDD)

왜 중요한가?

  • DDD를 이해하면 MSA 설계에 도움이 됨
  • 소프트웨어의 구조적 가치를 끌어올리기 위한 방법론

요약

  • 도메인 주도 설계는 도메인을 중심으로 설계와 구현이 이뤄진다.
  • 도메인은 소프트웨어가 해결하고자 하는 문제 영역
  • 도메인 개념 - 도메인 모델 - 도메인 객체가 유기적으로 연결된다.

도메인 주도 설계란 무엇일까?

도메인 주도 설계란 무엇일까? 도메인 주도 설계에서는 도메인을 중심으로 설계와 구현이 이뤄진다.

그렇다면 도메인은 뭘까?

도메인이란 소프트웨어가 해결하고자 하는 문제 영역을 의미한다. 개발자는 서비스 개발을 위해 소프트웨어 지식 뿐만 아니라 도메인에 대한 지식도 가지고 있어야 한다.

소프트웨어 지식 뿐만 아니라 유저들이 어떤 환경에서 어떤 문제들을 겪고있는지 파악해야 한다.

이것이 도메인 개념이다.

도메인 개념, 모델, 객체

도메인 개념: 도메인에 대한 지식들 도메인 모델: 도메인 개념이 추상화된 모델 도메인 객체: 도메인 모델이 애플리케이션 상에 구현된 객체

이는 일시적인 변환이 아니라 계속 연동되는 개념이다.

도메인 개념, 모델도 시간이 지남에 따라 변하거나 뒤집힐 수 있다. 개념, 모델, 객체의 관계가 잘 정립되어 있다면 유동적으로 변경될 수 있다.

도메인 모델은 도메인 관련 지식을 가진 도메인 전문가와 소프트웨어 지식을 가진 개발자가 협업하여 정의할 수 있다.

도메인 관련 개념의 신호와 소음

우리가 서비스를 만드는데 있어서 도메인의 모든 개념이 필요하지는 않다. 도메인 관련 개념에도 소프트웨어에 필요한 것, 아닌 것들이 있다.

소프트웨어에 필요한 도메인 개념은 신호, 그렇지 않은 도메인 개념은 소음이다. 신호와 소음을 구별하는 필터를 갖도록 하자.

도메인 주도 설계가 각광받는 것은 무엇 때문일까?

오늘날의 소프트웨어는 최초 개발 속도만큼이나 유지보수성이 중요하다. 그러나 기능만 우선 개발한 소프트웨어는 유지보수하기 어려우며 시간이 지날수록 레거시가 되어간다.

반면 도메인 주도 설계는 느리지만 재사용 가능한 방법론이다. 도메인 주도 설계는 소프트웨어의 구조적 가치를 끌어올리는 방법이다.

소프트웨어의 생명이 길수록 기능적 가치보다 구조적 가치의 중요성이 강조된다. 잘못된 기능은 수정할 수 있지만 잘못된 구조를 수정하는 것은 불가능에 가깝기 때문이다.

결론

한 때, 설계에 긴 시간을 들이는 것이 비효율적이라고 생각했었다. 흔히 말하는 빠른 프로토타입 개발이 더 효율적이라고 생각했다.

그러나 소프트웨어를 계속 유지보수하다보니, 기능적인 부분은 수정할 수 있지만 구조적인 부분은 수정하기 어려웠다. 결국은 처음부터 다시 만들어야 했다.

이러한 경험을 통해 설계에 시간을 들이는 것이 소프트웨어의 생명을 연장시키는 것이라는 것을 깨달았다.

DDD는 소프트웨어 설계를 효율적으로 하기 위한 방법론이다. DDD를 체화시켜서 프로젝트에 적용할 수 있다면 소프트웨어의 생명을 연장시킬 수 있을 것이다.

참조


Written by@박대성

독서와 지식관리에 관심이 많은 개발자

GitHub